#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>

#define PORT 10000 		/* Server的端口 */
#define MAXDATASIZE 100	/*一次可以读的最大字节数 */

int main1()
{
	int cpu();
	printf("%d\n",cpu());
	return 0;
}

int main(int argc, char *argv[])
{
	
	int cpu();
	char u[10];
	int num;
	num=cpu();
	sprintf(u,"%d",num); 
	int sockfd, numbytes;
	char buf[MAXDATASIZE];
	char buf1[8]="goodbye";
	struct hostent *he;		/* 主机信息 */
	struct sockaddr_in their_addr; 	/* 对方地址信息 */

	
	if (argc != 2) {
		fprintf(stderr,"usage: client hostname\n");
		exit(1);
	}
	if ((he=gethostbyname(argv[1])) == NULL) { 
		/* get the host info */
		herror("gethostbyname");
		exit(1);
	}

	if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) {
		perror("socket");
		exit(1);
	}

	their_addr.sin_family = AF_INET; 
	their_addr.sin_port = htons(PORT); 		/* short, NBO */
	their_addr.sin_addr = *((struct in_addr *)he->h_addr);
	bzero(&(their_addr.sin_zero), 8); 		/* 其余部分设成0 */

	if (connect(sockfd, (struct sockaddr *)&their_addr, sizeof(struct sockaddr)) == -1) {
		perror("connect");
		exit(1);
	}
	
	printf("sending\n");
	while(1)
	{	
		num=cpu();
		sprintf(u,"%d",num); 
		
		
		if(send(sockfd,u,sizeof(u),0)==-1) perror("send");
		
		printf("%s\n",u);
		
		
	}
	close(sockfd);
	
	return 0;
}

int cpu()
{
	FILE* fp;
	char a[10];
	
	int user[2],system[2],nice[2],idle[2];
	int iowait[2],irq[2],softirq[2],cpu[2];
	int userg;
	char text[1024];
	
{
	fp=fopen("/proc/stat","r");
	int index=0;
	sleep(1);
	while(!feof(fp))
	{
		if(index<1)
		{		
			fgets(text,1024,fp);	
	
			sscanf(text,"%s %d %d %d %d %d %d %d\n",a,&user[index],&system[index],&nice[index],&idle[index],&iowait[index],&irq[index],&softirq[index]);
			
			index++;
		}
		else break;
		
	}
	fclose(fp);
	sleep(2);
	fp=fopen("/proc/stat","r");
	while(!feof(fp))
	{
		if(index<2)
		{		
			fgets(text,1024,fp);	
	
			sscanf(text,"%s %d %d %d %d %d %d %d\n",a,&user[index],&system[index],&nice[index],&idle[index],&iowait[index],&irq[index],&softirq[index]);
			
			index++;
		}
		else break;
		
	}
	for(index=0;index<2;index++)
	{	
		cpu[index]=user[index]+system[index]+nice[index]+idle[index]+iowait[index]+irq[index]+softirq[index];
	}
	
	userg=100-(idle[1]-idle[0])*100/(cpu[1]-cpu[0]);
	
	fclose(fp);
}
	
	return(userg);
}

